package com.bestcem.xm.label.dao.mapper;

import com.bestcem.xm.label.entity.mysql.LabelCountEntity;
import com.bestcem.xm.label.entity.mysql.LabelEntity;
import com.bestcem.xm.label.service.dto.label.LabelDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 标签的Mapper
 *
 * @author zh.zhang <zh.zhang@idiaoyan.com>
 * @version v1.0
 * @date 2021-09-23
 */
@Mapper
public interface LabelMapper {

    /**
     * 根据 id 列表, 批量获取标签信息
     *
     * @param ids 标签id列表
     * @return List<LabelDTO>
     */
    List<LabelDTO> listLabels(List<String> ids);


    /**
     * 根据标签组id列表获取所属的标签
     *
     * @param groupIds 标签组id列表
     * @return List<LabelDTO>
     */
    List<LabelDTO> listByLabelGroupIds(List<String> groupIds);

    /**
     * 根据 标签组id 获取标签
     *
     * @param labelGroupId
     * @return
     */
    List<LabelEntity> findByLabelGroupId(@Param("labelGroupId") String labelGroupId);

    /**
     *  根据 标签组id 删除标签
     *
     * @param labelGroupId
     */
    void deleteByLabelGroupId(@Param("labelGroupId") String labelGroupId);

    /**
     * 根据组织id 和 name 统计数据
     *
     * @param orgId
     * @param name
     * @return
     */
    int countByOrgIdAndName(@Param("orgId") String orgId, @Param("name") String name);

    /**
     * 根据 id 获取数据
     *
     * @param labelId
     * @return
     */
    LabelEntity findById(@Param("id") String labelId);

    /**
     * 创建标签
     *
     * @param toEntity
     */
    void createLabel(LabelEntity toEntity);

    /**
     * 批量创建标签
     *
     * @param labelEntities 标签集合
     */
    void batchCreate(List<LabelEntity> labelEntities);

    /**
     * 更新标签
     *
     * @param toEntity
     */
    void updateLabel(LabelEntity toEntity);

    /**
     * 根据id 删除标签
     *
     * @param id
     * @return
     */
    int deleteById(@Param("id") String id);

    /**
     * 根据标签组id 和 名称获取数据
     *
     * @param labelGroupId
     * @param name
     * @return
     */
    LabelEntity findByLabelGroupIdAndName(@Param("labelGroupId") String labelGroupId, @Param("name") String name);

    /**
     * 获取该组织下所有的标签
     *
     * @param orgId
     * @return
     */
    List<LabelEntity> findByOrgId(@Param("orgId") String orgId);

    /**
     * 批量插入 行业sample数据
     *
     * @param labelEntities
     */
    void batchSaveSampleData(@Param("list") List<LabelEntity> labelEntities);

    /**
     * 统计标签数
     *
     * @param ids
     * @return
     */
    long countByIds(Set<String> ids);

    /**
     * 根据组织id 查询数据
     *
     * @param orgId
     * @return
     */
    Long countByOrgId(@Param("orgId") String orgId);

    /**
     * 批量获取数据
     *
     * @param orgId
     * @param offset
     * @param size
     * @return
     */
    List<LabelEntity> listByOrgId(@Param("orgId") String orgId, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 根据 组织id 和标签id列表获取数据
     *
     * @param orgId
     * @param labelIds
     * @return
     */
    List<LabelEntity> listByOrgIdAndIds(@Param("orgId") String orgId, @Param("list") List<String> labelIds);

    /**
     * 根据 组织id 和 标签名称 获取数据
     *
     * @param orgId
     * @param labelNames
     * @return
     */
    List<LabelEntity> listByLabelNames(@Param("orgId") String orgId, @Param("list") List<String> labelNames);

    /**
     * 分组获取 标签组id 对应的数量
     *
     * @param orgId
     * @param labelGroupIds
     * @return
     */
    List<LabelCountEntity> countByOrgIdAndLabelGroupIds(@Param("orgId") String orgId, @Param("list") Set<String> labelGroupIds);

    /**
     * 批量创建
     *
     * @param labelEntities
     */
    void batchSave(@Param("list") List<LabelEntity> labelEntities);

    /**
     * 批量更新
     *
     * @param labelEntities
     */
    void batchUpdate(@Param("list") List<LabelEntity> labelEntities);
}
